import Vue from 'vue'
import Vuex from 'vuex'
import {getRequest} from "../utils/api"
import SockJS from 'sockjs-client'
import Stomp from 'stompjs'
import { Notification } from 'element-ui';
import { error } from 'jquery'

Vue.use(Vuex)
const now = new Date();
const store= new Vuex.Store({
  state: {
    routes:[],
    admins:[],
    sessions:{},
    idDot:{},
    idDotTotoatl:'',
    user: {
      name: window.sessionStorage.getItem('user' || '[]') == null ? '未登录' : JSON.parse(window.sessionStorage.getItem('user' || '[]')).name,
      userFace: window.sessionStorage.getItem('user' || '[]') == null ? '' : JSON.parse(window.sessionStorage.getItem('user' || '[]')).userFace
    },
    currentAdmin:JSON.parse(window.sessionStorage.getItem('user')),
    currentSession:{},
    filterKey:'',
    stomp:null
  },
  mutations: {
    init_admin(state,admin){
      state.currentAdmin = admin;
    },
    initRoutes(state,data){
      state.routes=data;
    },
    initUser(state, user) {
      window.sessionStorage.setItem('user', JSON.stringify(user));
      state.user = user;
    },
    //vchat
    changeCurrentSession (state,currentSession) {
			state.currentSession = currentSession;
      //点击到聊天人消除红点
      Vue.set(state.idDot,state.currentAdmin.username+'#'+state.currentSession.username,false);
      //state.idDotTotoatl=false
		},
    //消息发送
		addMessage (state,msg) {
			let mss = state.sessions[state.currentAdmin.username + '#'+ msg.to];
      if(!mss){
        // state.sessions[state.currentAdmin.username + '#'+ msg.to]=[];
        Vue.set(state.sessions,state.currentAdmin.username + '#'+ msg.to,[]);
      }
      state.sessions[state.currentAdmin.username + '#'+ msg.to].push({
				content:msg.content,
				date: new Date(),
				self:!msg.notSelf,
			})
		},
    INIT_DATA (state) {
       //浏览器本地的历史聊天记录
       let data = localStorage.getItem('vue-chat-session');
       //console.log(data)
       if (data) {
         state.sessions = JSON.parse(data);
      }
    },
    INIT_ADMINS(state,data){
       state.admins = data;
    },
  },
  actions: {
    //消息接收
    connect(context){
      context.state.stomp = Stomp.over(new SockJS('/ws/eq'));
      let token =window.sessionStorage.getItem('tokenStr');
      context.state.stomp.connect({'Auth-Token':token},success=>{
        context.state.stomp.subscribe('/user/queue/chat',msg=>{
          let receiveMsg = JSON.parse(msg.body);
          if(!context.state.currentSession ||receiveMsg.from!=context.state.currentSession.username){
            Notification.info( {
              title: '【'+ receiveMsg.formNickname+'】发来一条消息',
              message: receiveMsg.content.length>10?receiveMsg.content.substr(0,10):receiveMsg.content,
              position: 'bottom-right'
            });
            Vue.set(context.state.idDot,context.state.currentAdmin.username+'#'+receiveMsg.from,true);
              context.state.idDotTotoatl=true
          }
          receiveMsg.notSelf =true;
          receiveMsg.to=receiveMsg.from;
          context.commit('addMessage',receiveMsg);
        })
      },error=>{
      })
    },
    initData (context) {
      context.commit('INIT_DATA')
       getRequest('/chat/admin').then(resp=>{
         if(resp){
          context.commit('INIT_ADMINS',resp)
         }
       })
      context.commit('INIT_DATA')
    }
  },
  modules: {
  }
})
//消息监听
store.watch(function (state) {
  return state.sessions
},function (val) {
  console.log('CHANGE: ', val);
  localStorage.setItem('vue-chat-session', JSON.stringify(val));
},{
  deep:true/*这个貌似是开启watch监测的判断,官方说明也比较模糊*/
})
export default store;
